home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / snippet.exe / DAYNUM.C < prev    next >
C/C++ Source or Header  |  1992-05-12  |  2KB  |  71 lines

  1. /*
  2. **  DAYNUM.C - Functions to return statistics about a given date.
  3. **
  4. **  public domain by Bob Stout - uses Ray Gardner's SCALDATE.C
  5. */
  6.  
  7. long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day);
  8. static long jan1date;
  9.  
  10. /*
  11. **  Determine if a given date is valid
  12. */
  13.  
  14. int valiDate(unsigned yr, unsigned mo, unsigned day)
  15. {
  16.       unsigned int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  17.  
  18.       if (1 > mo || 12 < mo)
  19.             return 0;
  20.       if (1 > day || day > (days[mo - 1] + (2 == mo && isleap(yr))))
  21.             return 0;
  22.       else  return 1;
  23. }
  24.  
  25. /*
  26. **  Return the day of the year (1 - 365/6)
  27. */
  28.  
  29. int daynum(int year, int month, int day)
  30. {
  31.       jan1date = ymd_to_scalar(year, 1, 1);
  32.       return (int)(ymd_to_scalar(year, month, day) - jan1date + 1L);
  33. }
  34.  
  35. /*
  36. **  Return the week of the year (1 - 52)
  37. */
  38.  
  39. int weeknum(int year, int month, int day)
  40. {
  41.       int dn = daynum(year, month, day);
  42.  
  43.       dn += (int)(jan1date % 7L) - 1;
  44.       return(1 + (dn / 7));
  45. }
  46.  
  47. #ifdef TEST
  48.  
  49. #include <stdio.h>
  50. void do_err(void);
  51.  
  52. void main(int argc, char *argv[])
  53. {
  54.       int day, month, year;
  55.  
  56.       if (4 > argc)
  57.       {
  58.             puts("Usage: DAYNUM month day year");
  59.             return;
  60.       }
  61.  
  62.       month = atoi(argv[1]);
  63.       day   = atoi(argv[2]);
  64.       year  = atoi(argv[3]);
  65.  
  66.       printf("%d/%d/%d is day #%d in week %d\n", month, day, year,
  67.             daynum(year, month, day), weeknum(year, month, day));
  68. }
  69.  
  70. #endif /* TEST */
  71.